package GestionDeDatos;

import InfoCliente.*;
import Excepciones.*;

import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;

public class AdministradorBD {
	
	public void CrearNuevoUsuario(Usuario usuario) throws SOAPException, ExistentUserException, 
			DatabaseException, CheckException, UpdateException {
		
		ClienteSOAP cliente = ClienteSOAP.Cliente();
		SOAPMessage mensaje = cliente.CrearMensaje();
        
        SOAPPart soapPart = mensaje.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
      		  
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("CrearNuevoUsuario");
        SOAPElement soapElemSon = soapBodyElem.addChildElement("usuario");
        soapElemSon.addChildElement("padron").addTextNode(usuario.getPadron().toString());
        soapElemSon.addChildElement("nombre").addTextNode(usuario.getNombre());
        soapElemSon.addChildElement("apellido").addTextNode(usuario.getApellido());
        soapElemSon.addChildElement("mail").addTextNode(usuario.getMail());
        soapElemSon.addChildElement("contrasena").addTextNode(usuario.getContraseña());

        mensaje.saveChanges();
        SOAPMessage reply = cliente.EnviarMensaje(mensaje);
        
        ExceptionHandler.ExistentUserExceptionScan(reply);
        ExceptionHandler.DatabaseExceptionScan(reply);
        ExceptionHandler.CheckExceptionScan(reply);
        ExceptionHandler.UpdateExceptionScan(reply);
	}
	
	public void EliminarUsuario(UsuarioActivo usuario) throws SOAPException, InvalidLogInException, 
			CheckException, UpdateException, DatabaseException {
		
		ClienteSOAP cliente = ClienteSOAP.Cliente();
		SOAPMessage mensaje = cliente.CrearMensaje();
        
        SOAPPart soapPart = mensaje.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
      		  
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("EliminarUsuario");
        SOAPElement soapElemSon = soapBodyElem.addChildElement("usuario");
        soapElemSon.addChildElement("padron").addTextNode(usuario.getPadron().toString());
        soapElemSon.addChildElement("contrasena").addTextNode(usuario.getContraseña());

        mensaje.saveChanges();
        SOAPMessage reply = cliente.EnviarMensaje(mensaje);
        
        ExceptionHandler.InvalidLogInExceptionScan(reply);
        ExceptionHandler.DatabaseExceptionScan(reply);
        ExceptionHandler.CheckExceptionScan(reply);
        ExceptionHandler.UpdateExceptionScan(reply);
	}
	
	public void EnviarSolicitud(UsuarioActivo usuarioPide, Solicitud solicitud) throws SOAPException, 
			InvalidLogInException, InvalidFriendshipRequestException, InexistentUserException, 
			ExistentFriendshipRequestException, ExistentFriendshipException, DatabaseException, 
			CheckException, UpdateException {
		
		ClienteSOAP cliente = ClienteSOAP.Cliente();
		SOAPMessage mensaje = cliente.CrearMensaje();
        
        SOAPPart soapPart = mensaje.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
      		  
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("EnviarSolicitud");
        
        SOAPElement soapElemFirstSon = soapBodyElem.addChildElement("usuarioPide");
        soapElemFirstSon.addChildElement("padron").addTextNode(usuarioPide.getPadron().toString());
        soapElemFirstSon.addChildElement("contrasena").addTextNode(usuarioPide.getContraseña());
        
        SOAPElement soapElemSecondSon = soapBodyElem.addChildElement("solicitud");
        soapElemSecondSon.addChildElement("padronPide").addTextNode(solicitud.getPadronPide().toString());
        soapElemSecondSon.addChildElement("padronAcepta").addTextNode(solicitud.getPadronAcepta().toString());

        mensaje.saveChanges();
        SOAPMessage reply = cliente.EnviarMensaje(mensaje);
        
        ExceptionHandler.InvalidLogInExceptionScan(reply);
        ExceptionHandler.InvalidFriendshipRequestExceptionScan(reply);
        ExceptionHandler.InexistentUserExceptionScan(reply);
        ExceptionHandler.ExistentFriendshipRequestExceptionScan(reply);
        ExceptionHandler.ExistentFriendshipExceptionScan(reply);
        ExceptionHandler.DatabaseExceptionScan(reply);
        ExceptionHandler.CheckExceptionScan(reply);
        ExceptionHandler.UpdateExceptionScan(reply);
	}
	
	public void ConfirmarAmistad(UsuarioActivo usuarioConfirma, Amistad amistad) throws SOAPException, 
			InvalidLogInException, InvalidFriendshipException, InexistentUserException, 
			InexistentFriendshipRequestException, ExistentFriendshipException, DatabaseException, 
			CheckException, UpdateException {
		
		ClienteSOAP cliente = ClienteSOAP.Cliente();
		SOAPMessage mensaje = cliente.CrearMensaje();
        
        SOAPPart soapPart = mensaje.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
      		  
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("ConfirmarAmistad");
        
        SOAPElement soapElemFirstSon = soapBodyElem.addChildElement("usuarioConfirma");
        soapElemFirstSon.addChildElement("padron").addTextNode(usuarioConfirma.getPadron().toString());
        soapElemFirstSon.addChildElement("contrasena").addTextNode(usuarioConfirma.getContraseña());
        
        SOAPElement soapElemSecondSon = soapBodyElem.addChildElement("amistad");
        soapElemSecondSon.addChildElement("padron1").addTextNode(amistad.getPadron1().toString());
        soapElemSecondSon.addChildElement("padron2").addTextNode(amistad.getPadron2().toString());

        mensaje.saveChanges();
        SOAPMessage reply = cliente.EnviarMensaje(mensaje);
        
        ExceptionHandler.InvalidLogInExceptionScan(reply);
        ExceptionHandler.InvalidFriendshipExceptionScan(reply);
        ExceptionHandler.InexistentUserExceptionScan(reply);
        ExceptionHandler.InexistentFriendshipRequestExceptionScan(reply);
        ExceptionHandler.ExistentFriendshipExceptionScan(reply);
        ExceptionHandler.DatabaseExceptionScan(reply);
        ExceptionHandler.CheckExceptionScan(reply);
        ExceptionHandler.UpdateExceptionScan(reply);
	}
	
	public void DeclinarSolicitud(UsuarioActivo usuarioDeclina, Solicitud solicitud) throws SOAPException, 
			InvalidLogInException, InvalidFriendshipRequestException, InexistentUserException, 
			InexistentFriendshipRequestException, DatabaseException, CheckException, UpdateException {
		
		ClienteSOAP cliente = ClienteSOAP.Cliente();
		SOAPMessage mensaje = cliente.CrearMensaje();
        
        SOAPPart soapPart = mensaje.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
      		  
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("DeclinarSolicitud");
        
        SOAPElement soapElemFirstSon = soapBodyElem.addChildElement("usuarioDeclina");
        soapElemFirstSon.addChildElement("padron").addTextNode(usuarioDeclina.getPadron().toString());
        soapElemFirstSon.addChildElement("contrasena").addTextNode(usuarioDeclina.getContraseña());
        
        SOAPElement soapElemSecondSon = soapBodyElem.addChildElement("solicitud");
        soapElemSecondSon.addChildElement("padronPide").addTextNode(solicitud.getPadronPide().toString());
        soapElemSecondSon.addChildElement("padronAcepta").addTextNode(solicitud.getPadronAcepta().toString());

        mensaje.saveChanges();
        SOAPMessage reply = cliente.EnviarMensaje(mensaje);
        
        ExceptionHandler.InvalidLogInExceptionScan(reply);
        ExceptionHandler.InvalidFriendshipRequestExceptionScan(reply);
        ExceptionHandler.InexistentUserExceptionScan(reply);
        ExceptionHandler.InexistentFriendshipRequestExceptionScan(reply);
        ExceptionHandler.DatabaseExceptionScan(reply);
        ExceptionHandler.CheckExceptionScan(reply);
        ExceptionHandler.UpdateExceptionScan(reply);
	}
	
	public void DeshacerAmistad(UsuarioActivo usuarioDeshace, Amistad amistad) throws SOAPException, 
			InvalidLogInException, InvalidFriendshipException, InexistentUserException, 
			InexistentFriendshipException, DatabaseException, CheckException, UpdateException {
		
		ClienteSOAP cliente = ClienteSOAP.Cliente();
		SOAPMessage mensaje = cliente.CrearMensaje();
        
        SOAPPart soapPart = mensaje.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
      		  
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("DeshacerAmistad");
        
        SOAPElement soapElemFirstSon = soapBodyElem.addChildElement("usuarioDeshace");
        soapElemFirstSon.addChildElement("padron").addTextNode(usuarioDeshace.getPadron().toString());
        soapElemFirstSon.addChildElement("contrasena").addTextNode(usuarioDeshace.getContraseña());
        
        SOAPElement soapElemSecondSon = soapBodyElem.addChildElement("amistad");
        soapElemSecondSon.addChildElement("padron1").addTextNode(amistad.getPadron1().toString());
        soapElemSecondSon.addChildElement("padron2").addTextNode(amistad.getPadron2().toString());

        mensaje.saveChanges();
        SOAPMessage reply = cliente.EnviarMensaje(mensaje);
        
        ExceptionHandler.InvalidLogInExceptionScan(reply);
        ExceptionHandler.InvalidFriendshipExceptionScan(reply);
        ExceptionHandler.InexistentUserExceptionScan(reply);
        ExceptionHandler.InexistentFriendshipExceptionScan(reply);
        ExceptionHandler.DatabaseExceptionScan(reply);
        ExceptionHandler.CheckExceptionScan(reply);
        ExceptionHandler.UpdateExceptionScan(reply);
	}
	
	public void RealizarInscripcion(UsuarioActivo usuario, Inscripcion inscripcion) throws SOAPException, 
		InvalidLogInException, InvalidInscriptionException, InexistentSubjectException, 
		ExistentInscriptionException, DatabaseException, CheckException, UpdateException {
		
		ClienteSOAP cliente = ClienteSOAP.Cliente();
		SOAPMessage mensaje = cliente.CrearMensaje();
        
        SOAPPart soapPart = mensaje.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
      		  
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("RealizarInscripcion");
        
        SOAPElement soapElemFirstSon = soapBodyElem.addChildElement("usuario");
        soapElemFirstSon.addChildElement("padron").addTextNode(usuario.getPadron().toString());
        soapElemFirstSon.addChildElement("contrasena").addTextNode(usuario.getContraseña());
        
        SOAPElement soapElemSecondSon = soapBodyElem.addChildElement("inscripcion");
        soapElemSecondSon.addChildElement("padron").addTextNode(inscripcion.getPadron().toString());
        soapElemSecondSon.addChildElement("departamento").addTextNode(inscripcion.getDepartamento().toString());
        soapElemSecondSon.addChildElement("materia").addTextNode(inscripcion.getMateria().toString());
        soapElemSecondSon.addChildElement("curso").addTextNode(inscripcion.getCurso().toString());
        
        mensaje.saveChanges();
        SOAPMessage reply = cliente.EnviarMensaje(mensaje);
        
        ExceptionHandler.InvalidLogInExceptionScan(reply);
        ExceptionHandler.InvalidInscriptionExceptionScan(reply);
        ExceptionHandler.InexistentSubjectExceptionScan(reply);
        ExceptionHandler.ExistentInscriptionExceptionScan(reply);
        ExceptionHandler.DatabaseExceptionScan(reply);
        ExceptionHandler.CheckExceptionScan(reply);
        ExceptionHandler.UpdateExceptionScan(reply);
	}
	
	public void DeshacerInscripcion(UsuarioActivo usuario, Inscripcion inscripcion) throws SOAPException, 
			InvalidLogInException, InvalidInscriptionException, InexistentSubjectException, 
			InexistentInscriptionException, DatabaseException, CheckException, UpdateException {
		
		ClienteSOAP cliente = ClienteSOAP.Cliente();
		SOAPMessage mensaje = cliente.CrearMensaje();
        
        SOAPPart soapPart = mensaje.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
      		  
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("DeshacerInscripcion");
        
        SOAPElement soapElemFirstSon = soapBodyElem.addChildElement("usuario");
        soapElemFirstSon.addChildElement("padron").addTextNode(usuario.getPadron().toString());
        soapElemFirstSon.addChildElement("contrasena").addTextNode(usuario.getContraseña());
        
        SOAPElement soapElemSecondSon = soapBodyElem.addChildElement("inscripcion");
        soapElemSecondSon.addChildElement("padron").addTextNode(inscripcion.getPadron().toString());
        soapElemSecondSon.addChildElement("departamento").addTextNode(inscripcion.getDepartamento().toString());
        soapElemSecondSon.addChildElement("materia").addTextNode(inscripcion.getMateria().toString());
        soapElemSecondSon.addChildElement("curso").addTextNode(inscripcion.getCurso().toString());
        
        mensaje.saveChanges();
        SOAPMessage reply = cliente.EnviarMensaje(mensaje);
        
        ExceptionHandler.InvalidLogInExceptionScan(reply);
        ExceptionHandler.InvalidInscriptionExceptionScan(reply);
        ExceptionHandler.InexistentSubjectExceptionScan(reply);
        ExceptionHandler.InexistentInscriptionExceptionScan(reply);
        ExceptionHandler.DatabaseExceptionScan(reply);
        ExceptionHandler.CheckExceptionScan(reply);
        ExceptionHandler.UpdateExceptionScan(reply);
	}
}
